package org.wx.thread.interview;

import java.util.ArrayList;
import java.util.List;

/**
 * 曾经的面试题：（淘宝？）
 * 实现一个容器，提供两个方法，add，size
 * 写两个线程，线程1添加10个元素到容器中，线程2实现监控元素的个数，当个数到5个时，线程2给出提示并结束
 *
 * 分析下面这个程序，能完成这个功能吗？
 * Volatile 保持多线程之间可见性 有序性
 */
public class VolatileTest {
    volatile List storeList = new ArrayList<String>();
    volatile boolean endFlag = true;

    void add(String str){
        storeList.add(str);
    }

    int size(){
        return storeList.size();
    }

    public static void main(String[] args) {
        final VolatileTest oneTest = new VolatileTest();

        new Thread(()->{
            for (int i = 0; i < 10; i++) {
                if(oneTest.endFlag){
                    oneTest.add(Integer.toString(i));
                    System.out.println("添加了元素"+i);

                }

            }
        }).start();

        new Thread(() -> {
            while (true){
                if(oneTest.size() == 5){
                    oneTest.endFlag = false;
                    System.out.println("=======元素已经到5个========");

                    break;
                }
            }

        }).start();

    }

}
